var express = require('express');
var router = express.Router();
var path = require("path");

// 获取验证模块
var authorization = require(path.join(process.cwd(), "/modules/authorization"));

// 角色管理模块
var roleServ = authorization.getService("RoleService");

// 获取角色列表
router.get("/",
    // 参数验证
    function(req, res, next) {
        next();
    },
    // 处理业务逻辑
    function(req, res, next) {
        roleServ.getAllRoles(function(err, result) {
            if (err) return res.sendResult(null, 400, err);
            res.sendResult(result, 200, "获取成功");
        })(req, res, next);
    }
);

// 创建角色
router.post("/",
    // 参数验证
    function(req, res, next) {
        if (!req.body.roleName) return res.sendResult(null, 400, "角色名称不能为空");
        next();
    },
    // 处理业务逻辑
    function(req, res, next) {
        roleServ.createRole({
            "roleName": req.body.roleName,
            "roleDesc": req.body.roleDesc
        }, function(err, role) {
            if (err) return res.sendResult(null, 400, err);
            res.sendResult(role, 201, "创建成功");
        })(req, res, next);
    }
);

// 获取角色详情
router.get("/:id",
    // 参数验证
    function(req, res, next) {
        if (!req.params.id) return res.sendResult(null, 400, "角色ID不能为空");
        if (isNaN(parseInt(req.params.id))) res.sendResult(null, 400, "角色ID必须为数字");
        next();
    },
    // 处理业务逻辑
    function(req, res, next) {
        roleServ.getRoleById(
            req.params.id,
            function(err, result) {
                if (err) return res.sendResult(null, 400, err);
                res.sendResult(result, 200, "获取成功");
            })(req, res, next);
    }
);

// 更新角色信息
router.put("/:id",
    // 参数验证
    function(req, res, next) {
        if (!req.params.id) return res.sendResult(null, 400, "角色ID不能为空");
        if (isNaN(parseInt(req.params.id))) return res.sendResult(null, 400, "角色ID必须为数字");
        if (!req.body.roleName) return res.sendResult(null, 400, "角色名称不能为空");
        next();
    },
    // 处理业务逻辑
    function(req, res, next) {
        roleServ.updateRole({
                "id": req.params.id,
                "roleName": req.body.roleName,
                "roleDesc": req.body.roleDesc
            },
            function(err, result) {
                if (err) return res.sendResult(null, 400, err);
                res.sendResult(result, 200, "获取成功");
            })(req, res, next);
    }
);

// 删除角色
router.delete("/:id",
    // 参数验证
    function(req, res, next) {
        if (!req.params.id) return res.sendResult(null, 400, "角色ID不能为空");
        if (isNaN(parseInt(req.params.id))) return res.sendResult(null, 400, "角色ID必须为数字");
        next();
    },
    // 处理业务逻辑
    function(req, res, next) {
        roleServ.deleteRole(
            req.params.id,
            function(err, success) {
                if (err) return res.sendResult(null, 400, err);
                res.sendResult(null, 200, "删除成功");
            })(req, res, next);
    }
);

// 为角色授权
router.post("/:id/rights",
    // 参数校验
    function(req, res, next) {
        if (!req.params.id) return res.sendResult(null, 400, "角色ID不能为空");
        if (isNaN(parseInt(req.params.id))) res.sendResult(null, 400, `角色ID必须为数字`);
        next();
    },
    // 业务逻辑
    function(req, res, next) {
        roleServ.updateRoleRight(req.params.id, req.body.rids, function(err, newRole) {
            if (err) return res.sendResult(null, 400, err);
            res.sendResult(null, 200, "更新成功");
        })(req, res, next);
    }
);

// 删除角色权限
router.delete("/:id/rights/:rightId",
    // 参数验证
    function(req, res, next) {
        if (!req.params.id) return res.sendResult(null, 400, "角色ID不能为空");
        if (isNaN(parseInt(req.params.id))) res.sendResult(null, 400, "角色ID必须为数字");
        if (isNaN(parseInt(req.params.rightId))) res.sendResult(null, 400, "权限ID必须为数字");
        next();
    },
    // 业务逻辑
    function(req, res, next) {
        roleServ.deleteRoleRight(req.params.id, req.params.rightId, function(err, result) {
            if (err) return res.sendResult(null, 400, err);
            res.sendResult(result, 200, "取消权限成功");
        })(req, res, next);
    }
);

module.exports = router;